﻿#include <iostream>

int main()
{
	std::cout << "Hello World!\n";

	//常用的运算符
	/*优先级 / 结合性	运算符	描述	模式
		1 L->R::全局命名空间（一元）::name
		::命名空间（二元）	class_name::member_name
		2 L->R()	括号(expression)
		()	函数调用	function_name(parameters)
		()	初始化	type name(expression)
	{
	}	列表初始化	type name{ expression }
		type()	类型转换	new_type(expression)
		type{}	类型转换	new_type{ expression }
		[] 数组下标取值	pointer[expression]
		.取对象成员	object.member_name
		->取对象指针的成员	object_pointer->member_name
		++	后自增	lvalue++
		––	后自减	lvalue––
		typeid	运行时类型信息	typeid(type) or typeid(expression)
		const_cast	去掉类型的const限定	const_cast(expression)
		dynamic_cast	运行时类型转换	dynamic_cast(expression)
		reinterpret_cast	强制类型转换	reinterpret_cast(expression)
		static_cast	编译时类型转换	static_cast(expression)
		sizeof…	获取模板打包的参数个数	sizeof…(expression)
		noexcept	编译时异常检查	noexcept(expression)
		alignof	获取类型对齐方式	alignof(type)
		3 R->L + 一元加 + expression
		- 一元减 - expression
		++	前自增	++lvalue
		–	前自减	––lvalue
		!逻辑非	!expression
		not 逻辑非	not expression
		~按位取反	~expression
		(type)	c样式类型转换(new_type)expression
		sizeof	求字节大小	sizeof(type) or sizeof(expression)
		co_await	异步Await调用	co_await expression(C++20)
		& 取对象地址 & lvalue
		* 解引用 * expression
		new	动态内存分配	new type
		new[]	动态数组内存分配	new type[expression]
		delete	动态内存回收	delete pointer
		delete[]	动态数组内存回收	delete[] pointer
		4 L->R->*成员指针访问	object_pointer->*pointer_to_member
		.*成员对象访问	object.*pointer_to_member
		5 L->R * 乘	expression * expression
		/ 除	expression / expression
		% 余数	expression % expression
		6 L->R + 加	expression + expression
		- 减	expression - expression
		7 L->R	«	按位左移 / 插入	expression « expression
		»	按位右移 / 提取	expression » expression
		8 L->R <=> 三向比较	expression <=> expression
		9 L->R	<	小于比较	expression < expression
		<= 小于等于比较	expression <= expression
		>	大于比较	expression > expression
		>= 大于等于比较	expression >= expression
		10 L->R == 相等比较	expression == expression
		!= 不相等比较	expression != expression
		11 L->R & 按位 And	expression & expression
		12 L->R ^ 按位 XOR	expression ^ expression
		13 L->R | 按位 OR	expression | expression
		14 L->R && 逻辑 AND	expression && expression
		and 逻辑 AND	expression and expression
		15 L->R || 逻辑 OR	expression || expression
		or 逻辑 OR	expression or expression
		16 R->L	throw	抛出异常	throw expression
		co_yield	Yield 表达式(C++20)	co_yield expression
		? : 条件表达式	expression ? expression : expression
		= 赋值	lvalue = expression
		*= 乘赋值	lvalue *= expression
		/= 除赋值	lvalue /= expression
		%= 余数赋值	lvalue %= expression
		+= 加赋值	lvalue += expression
		-= 减赋值	lvalue -= expression
		« = 按位左移赋值	lvalue « = expression
		» = 按位右移赋值	lvalue » = expression
		&= 按位And赋值	lvalue &= expression
		|= 按位Or赋值	lvalue |= expression
		^= 按位Xor赋值	lvalue ^= expression
		17 L->R, 逗号运算符	expression, expression*/

	int x{ 7 };
	int y{ 4 };

	std::cout << "int / int = " << x / y << '\n';
	std::cout << "double / int = " << static_cast<double>(x) / y << '\n';
	std::cout << "int / double = " << x / static_cast<double>(y) << '\n';
	std::cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << '\n';
	std::cout << "The remainder is: " << x % y << '\n';
	double powx{ std::pow(3.0, 4.0) }; // 3的4次方
	++x; // x加一变成1
	x++; // x加一变成2
	if (!(x > y))
		std::cout << x << " is not greater than " << y << '\n';
	else
		std::cout << x << " is greater than " << y << '\n';

	/*操作符	可替代的关键字
		&&		and
		||		or
		!		not*/
	if (x > 0 or x < 100 and y == 1)
	{

	}


	return 0;
}
